/**
 * Copyright &copy; 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.example.spring.dao.sys;



import com.example.spring.common.MyBatisDao;
import com.example.spring.dao.TreeDao;
import com.example.spring.entity.Organization;
import com.example.spring.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 机构DAO接口
 *
 * @author ThinkGem
 * @version 2014-05-16
 */
@MyBatisDao
public interface OrganizationDao extends TreeDao<Organization> {

    /**
     * 根据机构编号查询机构信息
     *
     * @return
     */
    public Organization getOrgByNo(Organization organization);

    /**
     * 通过部门名称获取，该名称的OrgList
     *
     * @param orgName
     * @return
     */
    public List<Organization> getOrgListByName(@Param("orgName") String orgName);

    /**
     * 根据机构简称查询
     *
     * @param simpleCode
     * @return
     */
    public Organization getOrgBySimpleCode(@Param("simpleCode") String simpleCode);


    /**
     * 获取最大的机构ID值
     */
    public Organization getOrgMaxID();


    /**
     * 获得相同一级部门下的最大部门Code
     * 注意：Code编号的设置是按照一级部门来排的，相同一级部门下的机构树Code的前4位一样
     *
     * @return
     */
    public String getMaxCodeByFirstLevelOrgCode(@Param("subStrFirstOrgCode") String subStrFirstOrgCode);

    /**
     * 根据一级部门名，获取部门对象
     *
     * @param firstOrgName
     * @param firstOrgGrade
     * @return
     */
    public Organization getFirstOrgByName(@Param("firstOrgName") String firstOrgName, @Param("firstOrgGrade") String firstOrgGrade);

    /**
     * 获取所有部门集合
     *
     * @return
     */
    public List<Organization> getOrgList();

    /**
     * 获取相同上级部门的最大Sort
     *
     * @param parentId
     * @return
     */
    public Integer getMaxSortByParentId(@Param("parentId") String parentId);

    /**
     * 通过部门名和parentIds获取该部门对象
     *
     * @param orgName
     * @param parentIDs
     * @return
     */
    public Organization getOrgByNameAndParentIDs(@Param("orgName") String orgName, @Param("parentIDs") String parentIDs);

    /**
     * 通过parentids进行模糊查询，查询某id下面的子节点集合
     *
     * @param parentIDStr
     * @return
     */
    public List<Organization> getListByParentIDsLike(@Param("parentIDStr") String parentIDStr);

    /**
     * 通过 parentID sort查询
     *
     * @param sort
     * @param parentId
     * @return
     */
    public Organization getNextOrganization(@Param("sort") int sort, @Param("parentId") String parentId, @Param("opt") String opt, @Param("orderBy") String orderBy);

    /**
     * 通过id修改排序号
     *
     * @param id
     * @param sort
     */
    public void updateOrganizationScot(@Param("id") String id, @Param("sort") int sort);


    /**
     * 通过parentids进行查询，查询某id下面的子节点集合
     *
     * @param parentIDStr
     * @return
     */
    public List<Organization> findOrgList(@Param("parentIDStr") String parentIDStr);

    /**
     * 根据渠道信息,查询对应的渠道机构
     */
    public List<Organization> findmanageChannelList(User user);


}
